package com.xzy.sms.web.system.utils;

import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;

import com.xzy.sms.web.system.PermissionConstants;
import com.xzy.sms.web.system.service.security.UserProfile;

/**
 * 用户相关信息
 * 
 * @author macong
 * @since 1.0
 * @version 2014-10-15 macong
 */
public class UserUtils {
    
    /**
     * 获取用户的profile
     * 
     * @return UserProfile
     */
    public static UserProfile getUserProfile() {
        UserProfile prof = (UserProfile) SecurityUtils.getSubject().getPrincipal();
        if (prof == null) {
            prof = new UserProfile();
        }
        return prof;
    }
    
    /**
     * 获取用户Id
     * 
     * @return UserId
     */
    public static String getUserId() {
        UserProfile prof = getUserProfile();
        return prof.getUserId();
    }
    
    /**
     * 获取用户account
     * 
     * @return account
     */
    public static String getAccount() {
        UserProfile prof = getUserProfile();
        return prof.getAccount();
    }
    
    /**
     * 获取用户name
     * 
     * @return name
     */
    public static String getName() {
        UserProfile prof = getUserProfile();
        return prof.getUserName();
    }
    
    /**
     * 判断是否有权限
     * 
     * @param name 权限名称
     * @return 是否有权限
     */
    public static boolean hasPermission(String name) {
        if (StringUtils.isEmpty(name)) {
            return true;
        }
        Subject subject = SecurityUtils.getSubject();
        return subject != null && subject.isPermitted(name);
    }
    
    /**
     * 判断是否是管理员
     * 
     * @return 是否有权限
     */
    public static boolean isAdmin() {
        return hasPermission(PermissionConstants.ADMIN);
    }
    
    /**
     * 设置session属性
     * 
     * @param key key
     * @param value value
     */
    public static void setSessionAtt(String key, String value) {
        Session session = SecurityUtils.getSubject().getSession(true);
        session.setAttribute(key, value);
    }
    
    /**
     * 设置session属性
     * 
     * @param key key
     * @return 值
     */
    public static Object getSessionVal(String key) {
        Session session = SecurityUtils.getSubject().getSession(true);
        return session.getAttribute(key);
    }
    
    /**
     * FIXME 方法注释信息(此标记由Eclipse自动生成,请填写注释信息删除此标记)
     *
     * @return xx
     */
    public static String getUserName() {
        // TODO 自动生成方法存根注释，方法实现时请删除此注释
        return getName();
    }
}
